With the ever-increasing performance of today's computers, it is not uncommon to run more than one operating system (OS) on a single computer using a virtual machine (VM) environment. Running one or more VMs, each with its own guest OS, presents many benefits, as well as a few difficulties.
For example, when a hypervisor has created a fully-virtualized personal computer (PC) guest OS running in a VM environment, there is no dependable way of detecting the existence of this situation from within the VM, or to otherwise initiate communications from within the VM. Some solutions, such as redpill and nopill, use machine instructions that fail in a number of situations, e.g., if the number of hardware processors is greater than one. Other solutions operate to search for operational artifacts which are specific to a software package (e.g., processes with the name “vmware” under Microsoft® Windows® operating system), or certain hardware (e.g., evidence of using vmware media access control addresses or specific machine language instruction sets). Such solutions often fail when the VM operates in environments where it is fully virtualized or emulated.